#include <iostream>
template <int N, int M>
int add() { return N + M; }
int main()
{
    // 模板实参必须是常量
    add<1, 2>(); // OK
    int a{2};
    //  add<1, a>();        // 编译错误，a 不是常量，无法编译期求值
    constexpr int b{2}; // b 是常量
    add<1, b>();        // OK
    const int c{a};     // c 是只读变量，但不是常量
    //  add<1, c>();        // 编译错误
}